home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_12_05 / hershey / arch.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-03-13  |  1.5 KB  |  84 lines

  1. /* ARCH.C
  2. */
  3.  
  4. #include <io51.h>
  5.  
  6. #pragma language=extended
  7.  
  8. #define TMOD0 0x01
  9. #define TMOD1 0x20
  10.  
  11. #define SERIAL_MODE1 0x40
  12. #define RECEIVE_ENABLE 0x10
  13. #define DISCARD_FRAME_ERROR 0x20
  14.  
  15. #define T0_COUNT 1250
  16. #define T0_LOAD ((unsigned)(0x10000L - T0_COUNT))
  17.  
  18. #define BAUD_RATE 0xfc
  19.  
  20. /* Note:  Keyword "data" tells compiler to put the
  21.           following in internal RAM
  22. */
  23. data int millisecond_counter;
  24. bit first_time;
  25.  
  26. interrupt [0x0B] using [1] void my_isr(void)
  27. {
  28.     P1.7 = 1;  /* Signal start of ISR */
  29.  
  30.     /* Load Timer 0 starting count */
  31.     TR0 = 0;   /* disable Timer 0 counting */
  32.  
  33.     TH0 = T0_LOAD >> 8;    /* Load high byte */
  34.     TL0 = T0_LOAD & 0xff;  /* Load low byte  */
  35.  
  36.     TR0 = 1;  /* Re-enable Timer 0 counting */
  37.  
  38.  
  39.     ++millisecond_counter;
  40.  
  41.     P1.7 = 0;  /* Signal end of ISR */
  42. }
  43.  
  44. char read_char()
  45. {
  46.     while(!RI)
  47.         ;
  48.     RI = 0;
  49.     return(SBUF);
  50. }
  51.  
  52. void write_char(char c)
  53. {
  54.     while(!(TI||first_time))
  55.         ;
  56.     first_time = 0;
  57.     TI = 0;
  58.     SBUF = c;
  59. }
  60.  
  61. void setup(void)
  62. {
  63.     /* prepare Timer 0, Timer 1 and serial port */
  64.     first_time = 1;
  65.     TH1 = BAUD_RATE;
  66.     TMOD = TMOD0 | TMOD1;
  67.     SCON = SERIAL_MODE1 | RECEIVE_ENABLE
  68.            | DISCARD_FRAME_ERROR;
  69.     TR1 = 1;  /* Turn on Timer 1 */
  70.     TR0 = 1;  /* Turn on Timer 0 */
  71.  
  72.     ET0 = 1;  /* Enable Timer 0 interrupts */
  73.     EA = 1;   /* Enable All enabled interrupts. */
  74. }
  75.  
  76. void main()
  77. {
  78.     setup();
  79.  
  80.     for(;;) {
  81.         write_char(read_char());
  82.     }
  83. }
  84.